#include <stdio.h>
#include <stdint.h>
#include "tree.h"

uint32_t digits10(uint64_t v);
void catostr(char* arr, int len, char* string);
int main() {
    setbuf(stdout, NULL); // 将stdout设置为无缓冲模式
    setbuf(stderr, NULL); // 将stdout设置为无缓冲模式
    int max = 5000000;
    Leader leader;
    initLeader(&leader);
    int i = 0;
    printf("add...\n");
    while(i<max){
        char k[digits10(i)];
        sprintf(k, "%d", i);
        RBtreenodeadd(&leader, k, NULL);
        i++;
    }
    printf("delete...\n");
    int j = 0;
    while(j<max){
        char w[digits10(j)];
        sprintf(w, "%d", j);
        noder node = RBtreenodesel(&leader, w);
        RBtreenodedel(&leader, w);
        j++;
    }
    return 0;
}
void catostr(char* arr, int len, char* string)
// 数组转string
{
    int t_len = (len + 1)*sizeof(char);
    char *tmp = (char *)malloc(t_len);
    memset(tmp, 0, t_len);
    for (int i = 0; i < len; i++)
    {
        tmp[i] = arr[i];
    }
    strcpy(string, tmp);
    //memcpy(string, tmp, len+1);
    free(tmp);
}
/* 返回10进制 数字的位数 */
uint32_t digits10(uint64_t v) {
    if (v < 10) return 1;
    if (v < 100) return 2;
    if (v < 1000) return 3;
    if (v < 1000000000000UL) {
        if (v < 100000000UL) {
            if (v < 1000000) {
                if (v < 10000) return 4;
                return 5 + (v >= 100000);
            }
            return 7 + (v >= 10000000UL);
        }
        if (v < 10000000000UL) {
            return 9 + (v >= 1000000000UL);
        }
        return 11 + (v >= 100000000000UL);
    }
    return 12 + digits10(v / 1000000000000UL);
}